/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package VisorImagenes;

import Negocio.clsFotoReceta;
import Presentacion.frmReceta;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;

/**
 *
 * @author RODRIGO
 */
public class frmVisor extends javax.swing.JDialog implements ActionListener {

    private Map nota = new HashMap();
    private String nombreFoto;
    private JButton boton;
    private int index = -1;

    public frmVisor(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        this.setTitle("Imagenes de la receta " + frmReceta.txtNombre.getText());
        this.setLocationRelativeTo(null);
        this.panelGaleria.setLayout(new BoxLayout(panelGaleria, BoxLayout.Y_AXIS));
        this.cargarImagenes();

        btnEditar.setEnabled(false);
        btnEliminar.setEnabled(false);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jToolBar1 = new javax.swing.JToolBar();
        btnAgregar = new javax.swing.JButton();
        btnEditar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        panelGaleria = new javax.swing.JPanel();
        lblfotoGrande = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(255, 255, 153));

        jToolBar1.setBackground(new java.awt.Color(255, 255, 153));
        jToolBar1.setFloatable(false);
        jToolBar1.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jToolBar1.setRollover(true);

        btnAgregar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/Create.png"))); // NOI18N
        btnAgregar.setToolTipText("Agregar imagen");
        btnAgregar.setFocusable(false);
        btnAgregar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAgregar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });
        jToolBar1.add(btnAgregar);

        btnEditar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/editar.png"))); // NOI18N
        btnEditar.setToolTipText("Editar Imagen");
        btnEditar.setFocusable(false);
        btnEditar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnEditar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });
        jToolBar1.add(btnEditar);

        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/cancel_48.png"))); // NOI18N
        btnEliminar.setToolTipText("Eliminar imagen");
        btnEliminar.setFocusable(false);
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        jToolBar1.add(btnEliminar);

        jScrollPane1.setBackground(new java.awt.Color(255, 204, 204));
        jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        panelGaleria.setBackground(new java.awt.Color(255, 204, 204));

        javax.swing.GroupLayout panelGaleriaLayout = new javax.swing.GroupLayout(panelGaleria);
        panelGaleria.setLayout(panelGaleriaLayout);
        panelGaleriaLayout.setHorizontalGroup(
            panelGaleriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 632, Short.MAX_VALUE)
        );
        panelGaleriaLayout.setVerticalGroup(
            panelGaleriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 529, Short.MAX_VALUE)
        );

        jScrollPane1.setViewportView(panelGaleria);

        lblfotoGrande.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblfotoGrande.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(lblfotoGrande, javax.swing.GroupLayout.PREFERRED_SIZE, 608, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 522, Short.MAX_VALUE)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblfotoGrande, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        frmReceta.buscar.setMultiSelectionEnabled(true);
        int seleccion = frmReceta.buscar.showOpenDialog(frmReceta.buscar);
        if (seleccion == JFileChooser.APPROVE_OPTION) {
            File[] fichero = frmReceta.buscar.getSelectedFiles();
            for (int i = 0; i < fichero.length; i++) {
                if (!existeEstaImegen(fichero[i])) {
                    String nombre = fichero[i].getName();
                    String direccion = fichero[i].getAbsolutePath();
                    clsFotoReceta.insertar_fotoReceta(nombre, direccion, frmReceta.IdRecetaSimple);
                    this.agregarNuevaImagen_aGaleria(direccion, nombre);
                }
            }
            clsFotoReceta.obtener_listaFotosRecetas(frmReceta.IdRecetaSimple);  //actualizamos todas las listas(listaID,listaNombre,Direcciones)
            ImageIcon icon = new ImageIcon(frmReceta.direcciones.get(0).toString());
            Image imag = icon.getImage().getScaledInstance(lblfotoGrande.getWidth(), lblfotoGrande.getHeight(), Image.SCALE_AREA_AVERAGING); //ponemos la imagen en grande
            lblfotoGrande.setIcon(new ImageIcon(imag));
        } else {
            frmReceta.buscar.cancelSelection();
        }
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        if (frmReceta.direcciones.size() > 0) {
            int pos = frmReceta.listaNombre.indexOf(nombreFoto);  // posicion de la foto en la se clickeo 
            clsFotoReceta.eliminar_fotoReceta(nombreFoto, clsFotoReceta.lstIdFoto.get(pos));
            clsFotoReceta.obtener_listaFotosRecetas(frmReceta.IdRecetaSimple); //obtengo las listas de nombre y direccines actualizadas
            panelGaleria.removeAll();
            this.cargarImagenes();  // vuelvo a cargar todas las imagenes
        }
        //si ya no hay mas imagenes pintamos una por defecto
        if (frmReceta.direcciones.isEmpty()) {
            lblfotoGrande.setIcon(new ImageIcon(getClass().getResource("/imagenes/cheff.png")));
        }
        btnEditar.setEnabled(false);
        btnEliminar.setEnabled(false);
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
        frmReceta.buscar.setMultiSelectionEnabled(false);
        int seleccion = frmReceta.buscar.showOpenDialog(frmReceta.buscar);
        if (seleccion == JFileChooser.APPROVE_OPTION) {
            File fichero = frmReceta.buscar.getSelectedFile();
            if (!existeEstaImegen(fichero)) {
                String nombre = fichero.getName();
                String direccion = fichero.getAbsolutePath();
                int pos = frmReceta.listaNombre.indexOf(nombreFoto); //obtenemos la posicion de la foto en donde se clickeo
                frmReceta.listaNombre.set(pos, nombre);              // actualizamos las listas 
                frmReceta.direcciones.set(pos, direccion);

                ImageIcon img = new ImageIcon(direccion);  //sacamos la direccion de la imagen
                Image image = img.getImage().getScaledInstance(120, 120, Image.SCALE_AREA_AVERAGING);  //ponemos tamaño pequeño
                Image image1 = img.getImage().getScaledInstance(lblfotoGrande.getWidth(), lblfotoGrande.getHeight(), Image.SCALE_AREA_AVERAGING);  //ponemos tamaño grande

                boton.setIcon(new ImageIcon(image));  //agregamos al boton la imagen
                lblfotoGrande.setIcon(new ImageIcon(image1)); //agregamos la foto grande
                boton.setText(nombre); // actualizamos el texto
                //para cuando pasa el mouse se agrande
                image = img.getImage().getScaledInstance(135, 135, Image.SCALE_AREA_AVERAGING);  //cuando pasa el mouse aumenta el tamaño
                boton.setSelectedIcon(new ImageIcon(image));

                nombreFoto = nombre;  //en caso de q desee actualizar nuevamente la foto entonces actualizamos nombreFoto
                clsFotoReceta.modificar_fotoReceta(clsFotoReceta.lstIdFoto.get(pos), direccion, nombre);
            }
        } else {
            frmReceta.buscar.cancelSelection();
        }

        btnEditar.setEnabled(false);
        btnEliminar.setEnabled(false);
    }//GEN-LAST:event_btnEditarActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(frmVisor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(frmVisor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(frmVisor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(frmVisor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the dialog */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                frmVisor dialog = new frmVisor(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JLabel lblfotoGrande;
    private javax.swing.JPanel panelGaleria;
    // End of variables declaration//GEN-END:variables

    private void cargarImagenes() {
        ImageIcon img;
        Image image;
        for (int i = 0; i < frmReceta.direcciones.size(); i++) {
            JButton buttonIMG = new JButton();
            img = new ImageIcon(frmReceta.direcciones.get(i).toString());  //sacamos la direccion de la imagen
            image = img.getImage().getScaledInstance(120, 120, Image.SCALE_AREA_AVERAGING);  //ponemos tamaño pequeño
            buttonIMG.setIcon(new ImageIcon(image));  //agregamos al boton la imagen

            Font f = new Font("Cambria", Font.BOLD, 14); // Nombre, Estilo, Tamaño
            buttonIMG.setFont(f);

            buttonIMG.setHorizontalTextPosition(buttonIMG.CENTER); //direccion del texto 
            buttonIMG.setVerticalTextPosition(buttonIMG.BOTTOM);
            buttonIMG.setText(frmReceta.listaNombre.get(i).toString()); //obtenemos el nombre de la imagen

            buttonIMG.setBorderPainted(false);
            buttonIMG.setContentAreaFilled(false);
            buttonIMG.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            image = img.getImage().getScaledInstance(135, 135, Image.SCALE_AREA_AVERAGING);  //cuando pasa el mouse aumenta el tamaño
            buttonIMG.setSelectedIcon(new ImageIcon(image));
            buttonIMG.addActionListener(this);  //para que responda al click

            index++;
            buttonIMG.setActionCommand("_Key" + index); //añadimos un identificador unico
            this.nota.put("_Key" + index, buttonIMG);


            this.panelGaleria.add(buttonIMG);
        }
        //para que cargue por defecto como foto grande la primera imagen de la lista de direcciones
        if (frmReceta.direcciones.size() > 0) {
            ImageIcon icon = new ImageIcon(frmReceta.direcciones.get(0).toString());
            Image imag = icon.getImage().getScaledInstance(lblfotoGrande.getWidth(), lblfotoGrande.getHeight(), Image.SCALE_AREA_AVERAGING); //ponemos la imagen en grande
            lblfotoGrande.setIcon(new ImageIcon(imag));
        }

        panelGaleria.updateUI();
    }

    public static boolean existeEstaImegen(File name) {
        return frmReceta.direcciones.contains(name);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String comando = e.getActionCommand();  //se obtiene el comando ejecutado
        Iterator it = nota.entrySet().iterator();  //se recorre el MAP
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String itm = entry.getKey().toString();  //se obtiene el KEY -> identificador unico
            if (itm.equals(comando)) {   //si comando de componente es igual a comando pulsado
                nombreFoto = ((JButton) entry.getValue()).getText();  //se obtiene el  nombre de la imagen
                ImageIcon icon = new ImageIcon(clsFotoReceta.obtenerDireccion(nombreFoto));  //se obtiene la direccion de la imagen con el nombre de la imagen
                Image imag = icon.getImage().getScaledInstance(lblfotoGrande.getWidth(), lblfotoGrande.getHeight(), Image.SCALE_AREA_AVERAGING); //ponemos la imagen en grande
                lblfotoGrande.setIcon(new ImageIcon(imag));
                boton = ((JButton) entry.getValue());  // obtengo el codigo del boton q ha sido pulsado

                btnEditar.setEnabled(true);
                btnEliminar.setEnabled(true);
            }
        }
    }

    private void agregarNuevaImagen_aGaleria(String direccion, String nombre) {
        JButton buttonIMG = new JButton();
        ImageIcon img;
        Image image;

        img = new ImageIcon(direccion);  //sacamos la direccion de la imagen
        image = img.getImage().getScaledInstance(120, 120, Image.SCALE_AREA_AVERAGING);  //ponemos tamaño pequeño
        buttonIMG.setIcon(new ImageIcon(image));  //agregamos al boton la imagen

        Font f = new Font("Cambria", Font.BOLD, 14); // Nombre, Estilo, Tamaño
        buttonIMG.setFont(f);

        buttonIMG.setHorizontalTextPosition(buttonIMG.CENTER); //direccion del texto 
        buttonIMG.setVerticalTextPosition(buttonIMG.BOTTOM);
        buttonIMG.setText(nombre); //obtenemos el nombre de la imagen

        buttonIMG.setBorderPainted(false);
        buttonIMG.setContentAreaFilled(false);
        buttonIMG.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        image = img.getImage().getScaledInstance(135, 135, Image.SCALE_AREA_AVERAGING);  //cuando pasa el mouse aumenta el tamaño
        buttonIMG.setSelectedIcon(new ImageIcon(image));
        buttonIMG.addActionListener(this);  //para que responda al click

        index++;
        buttonIMG.setActionCommand("_Key" + index); //añadimos un identificador unico
        this.nota.put("_Key" + index, buttonIMG);

        this.panelGaleria.add(buttonIMG);
        panelGaleria.updateUI();
    }
}
